home *** CD-ROM | disk | FTP | other *** search
/ Mac Magazin/MacEasy 32 / Mac Magazin and MacEasy Magazine CD - Issue 32.iso / Grafik & Text / OzTeX3.0 / Metafont / Inputs / ec / exrlig.mf < prev    next >
Text File  |  1997-03-16  |  10KB  |  222 lines

  1. % exrlig.mf
  2. %
  3. % (c) Copyright 1995, 1996, 1997 J"org Knappen
  4. % (c) Copyright 1990, 1992 Norbert Schwarz
  5. %
  6. % This file is part of ecfonts version 1.0
  7. %
  8. % Please read the files 00readme.txt, 00inst.txt, 00error.txt, and
  9. % copyrite.txt for further information
  10. %
  11. % You find some documentation in ecdoc.tex (needs LaTeX2e)
  12. %
  13. % Content:
  14. %
  15. %  roman style ligature characters
  16. %  dotless i,j; ligatures  fi, ff, fl, ffi, ffl
  17.  
  18. version_check(1,0);  % |version_check| was introduced in dc1.3
  19.  
  20. ecchar "Dotless letter i";
  21. beginchar(oct"031",5u#,x_height#,0);
  22. italcorr x_height#*slant-serif_fit#+.5stem#-2u#;
  23. adjust_fit(serif_fit#+stem_shift# if monospace:+.25u#fi,serif_fit#-stem_shift#);
  24. pickup tiny.nib; pos1(stem',0); pos2(stem',0);
  25. if odd(w-stem'): change_width; fi
  26. lft x1l=hround(.5w-.5stem'); x1=x2;
  27. top y1=x_height if serifs: +min(oo,serif_drop) fi; bot y2=0;
  28. filldraw stroke z1e--z2e;  % stem
  29. if serifs or monospace:
  30.  sloped_serif.l(1,2,a,1/3,.95jut,serif_drop);  % upper serif
  31. fi
  32. if serifs: dish_serif(2,1,b,1/3,jut,c,1/3,.9jut); fi  % lower serif
  33. penlabels(1,2); endchar;
  34.  
  35. ecchar "Dotless letter j";
  36. beginchar(oct"032",5.5u#,x_height#,desc_depth#);
  37. italcorr x_height#*slant-serif_fit#+.5stem#-2u#;
  38. adjust_fit(serif_fit#+2stem_shift# if monospace:+.5u# fi,
  39.  serif_fit#-2stem_shift# if monospace:-.5u# fi);
  40. pickup tiny.nib; pos1(stem',0); pos2(stem',0);
  41. rt x1r=hround(.5w+.25u+.5stem'); x1=x2;
  42. top y1=x_height if serifs: +min(oo,serif_drop) fi; bot y2=-1/3d;
  43. filldraw stroke z1e--z2e;  % stem
  44. if serifs: sloped_serif.l(1,2,a,1/3,1.1jut,serif_drop);  % upper serif
  45.  pickup tiny.nib; pos5(vair,-90); pos6(hair,-180); pos7(flare,-180);
  46.  x5=.5[x2,x6r]; bot y5r=-d-oo; y6-.5flare=-.88d;
  47.  if monospace: lft x6r=0 else: z6r=z7r; rt x7l=floor .75u fi;
  48.  (x,y5r)=whatever[z5l,z2l]; x5r:=max(x,.5[x6r,x5]);
  49.  filldraw stroke z2e{down}...z5e{left};  bulb(5,6,7); % arc and bulb
  50. else: pickup fine.nib; pos2'(stem',0); z2'=z2;
  51.  pos6(.2[vair,stem'],-90); pos7(vair,-90);
  52.  lft x7r=hround -.75u; bot y7r=vround 5/6(-d-oo);
  53.  x3r=x1r; top y4r=min(2x_height,h+1);
  54.  (x,y7l)=whatever[z7r,(x1,min(h,asc_height))]; x7l:=x;
  55.  z5r=z2'r; (x2'l,y5l)=whatever[z7l,z5r]; x5l=x2'l; y5=y5r;
  56.  x6r=.5[x7r,x5r]; x6l:=.5[x7l,x5l]; bot y6r=-d-oo;
  57.  filldraw stroke z2'e..{down}z5e & super_arc.e(5,6)
  58.   & term.e(6,7,left,1,4); fi  % arc and terminal
  59. penlabels(1,2,5,6,7); endchar;
  60.  
  61.  
  62. numeric itc#; % modified italic correction on `f' and `ff'
  63. itc#=if serifs: max(0,flare#-.25u#) else: 1.25u# fi;
  64.  
  65.  
  66. ecchar "The ligature fi";
  67. beginchar(oct"034",10u#+2letter_fit#,asc_height#,0);
  68. italcorr asc_height#*slant-serif_fit#+.5if serifs:stem# else:dot_size# fi-2u#;
  69. normal_adjust_fit(0,serif_fit#);
  70. pickup tiny.nib; pos1(stem',0); lft x1l=hround(2.5u-.5stem');
  71. pos11(stem',0); rt x11r=hround(w-2.5u+.5stem');
  72. pos12(stem',0); x11=x12; bot y12=0;
  73. pickup fine.nib; numeric bulb_diam, inner_jut;
  74. if serifs: bulb_diam=hround 1/4[.8[stem,flare],dot_size];
  75.  pos2(bulb_diam,0); x2r=x12r;
  76.  y2+.5bulb_diam=.8[x_height,h+oo]; top y11=x_height+min(oo,serif_drop);
  77.  if rt x1r+jut+.5u+2<=lft x11l-jut: inner_jut=jut;
  78.  else: rt x1r+inner_jut+.5u+2=lft x11l-inner_jut; fi
  79. else: bulb_diam=max(stem,dot_size);
  80.  pos2(6/7[vair,flare],90); top y2r=h; rt x2=hround 5.3u;
  81.  pickup tiny.nib; pos13(bulb_diam,0); pos14(bulb_diam,90);
  82.  x13=x11-.5; top y14r=min(2x_height,h+1); top y11=x_height;
  83.  if bot y14l-x_height<tiny: y14l:=min(y14r-eps,y11+2tiny); fi
  84.  x13=x14; y13=.5[y14l,y14r]; dot(13,14);  % dot
  85. fi;  % this is the ligature we're drawing
  86. f_stroke(1,2,a,b,c,jut,inner_jut); % left stem, arc, terminal, serif
  87. pickup tiny.nib; filldraw stroke z11e--z12e;  % right stem
  88. pickup crisp.nib; top y3r=top y4r=x_height; lft x3=hround .5u-1;
  89. pos3(bar,90); pos4(bar,90);
  90. if serifs: x4=x11;  % bar will overlap upper right serif
  91.  sloped_serif.l(11,12,d,1/3,jut,min(oo,serif_drop));  % upper right serif
  92.  dish_serif(12,11,e,1/3,inner_jut,f,1/3,jut);  % lower right serif
  93. else: rt x4= hround 5.3u; fi
  94. pickup crisp.nib; filldraw stroke z3e--z4e;  % bar
  95. penlabels(1,2,3,4,11,12,13,14); endchar;
  96.  
  97.  
  98. ecchar "The ligature ff";
  99. beginchar(oct"033",10.5u#+2letter_fit#,asc_height#,0);
  100. italcorr asc_height#*slant+if serifs:flare#-.25u# else: 1.25u# fi;
  101. normal_adjust_fit(0,0);
  102. pickup tiny.nib; pos1(stem',0); lft x1l=hround(2.5u-.5stem');
  103. pos11(stem',0); rt x11r=hround(w-3u+.5stem');
  104. pickup fine.nib; numeric bulb_diam, inner_jut;
  105. if serifs: bulb_diam=hround .8[stem,flare];
  106.  pos2(bulb_diam,0); pos12(bulb_diam,0);
  107.  rt x2r=hround(rt x11r-stem_corr); lft x12l=hround(w-.75u+.5);
  108.  y2+.5bulb_diam=.85[x_height,h+oo]; y12+.5bulb_diam=.9[x_height,h+oo];
  109.  if rt x1r+jut+.5u+2<=lft x11l-jut: inner_jut=jut;
  110.  else: rt x1r+inner_jut+.5u+2=lft x11l-inner_jut; fi
  111. else: pos2(5/7[vair,flare],90); top y2r=h; rt x2=hround 6.25u;
  112.  pos12(5/7[vair,flare],90); y12=y2; rt x12=hround(w+.75u); fi
  113. f_stroke(1,2,a,b,c,jut,inner_jut); % left stem, arc, terminal, serif
  114. f_stroke(11,12,d,e,f,inner_jut,1.25jut); % right stem, arc, terminal, serif
  115. pickup crisp.nib; top y3r=top y4r=x_height; lft x3=hround .5u-1;
  116. pos3(bar,90); pos4(bar,90);
  117. rt x4=hround(w-1/3u);
  118. if hefty: pos3'(bar,90); x3'-x1=x4-x11; y3'=y3;
  119.  pos4'(bar,90); x4'=x11; y4'=y4;
  120.  filldraw stroke z3e--z3'e; filldraw stroke z4'e--z4e;  % bars
  121. else: filldraw stroke z3e--z4e; fi  % bar
  122. penlabels(1,2,3,4,11,12); endchar;
  123.  
  124.  
  125. ecchar "The ligature fl";
  126. beginchar(oct"035",10u#+2letter_fit#,asc_height#,0);
  127. italcorr asc_height#*slant-serif_fit#+.5stem#-2u#;
  128. normal_adjust_fit(0,serif_fit#);
  129. pickup tiny.nib; pos1(stem',0); lft x1l=hround(2.5u-.5stem');
  130. pos11(stem',0); rt x11r=hround(w-2.5u+.5stem');
  131. pos12(stem',0); x11=x12; bot y12=0; top y11=h;
  132. filldraw stroke z11e--z12e;  % right stem
  133. pickup fine.nib; numeric bulb_diam, inner_jut;
  134. if serifs: bulb_diam=hround .8[stem,flare];
  135.  pos2(bulb_diam,0); x2r=x11r-stem_corr;
  136.  y2+.5bulb_diam=.9[x_height,h+oo];
  137.  sloped_serif.l(11,12,d,1/3,eps,max(serif_drop,oo)); % erase excess at top
  138.  if rt x1r+jut+.5u+2<=lft x11l-jut: inner_jut=jut;
  139.  else: rt x1r+inner_jut+.5u+2=lft x11l-inner_jut; fi
  140. else: pos2(5/7[vair,flare],90); top y2r=h; rt x2=hround 5.3u; fi
  141. f_stroke(1,2,a,b,c,jut,inner_jut); % left stem, arc, terminal, serif
  142. pickup crisp.nib; top y3r=top y4r=x_height; lft x3=hround .5u-1;
  143. pos3(bar,90); pos4(bar,90);
  144. if serifs: x4=x11;
  145.  dish_serif(12,11,e,1/3,inner_jut,f,1/3,jut);  % lower right serif
  146. else: rt x4= hround 5.3u; fi
  147. pickup crisp.nib; filldraw stroke z3e--z4e;  % bar
  148. penlabels(1,2,3,4,11,12); endchar;
  149.  
  150. ecchar "The ligature ffi";
  151. beginchar(oct"036",15u#+4letter_fit#,asc_height#,0);
  152. italcorr asc_height#*slant-serif_fit#+.5if serifs:stem# else:dot_size# fi-2u#;
  153. normal_adjust_fit(0,serif_fit#);
  154. pickup tiny.nib; pos1(stem',0); lft x1l=hround(2.5u-.5stem');
  155. pos11(stem',0); lft x11l=hround(.5w-.5stem');
  156. pos21(stem',0); rt x21r=hround(w-2.5u+.5stem');
  157. pos22(stem',0); x21=x22; bot y22=0;
  158. pickup fine.nib; numeric bulb_diam, inner_jut;
  159. if serifs: bulb_diam=hround 1/4[.8[stem,flare],dot_size];
  160.  pos2(bulb_diam,0); x2r=x11r-stem_corr;
  161.  pos12(bulb_diam,0); x12r=x21r;
  162.  top y21=x_height+min(oo,serif_drop);
  163.  y2+.5bulb_diam=.8[x_height,h+oo]; y12=y2;
  164.  if rt x1r+jut+.5u+2<=lft x11l-jut: inner_jut=jut;
  165.  else: rt x1r+inner_jut+.5u+2=lft x11l-inner_jut; fi
  166. else: bulb_diam=max(stem,dot_size);
  167.  pos2(5/7[vair,flare],90); top y2r=h; rt x2=hround 5.75u;
  168.  pos12(6/7[vair,flare],90); y12=y2; rt x12=hround(.5w+2.8u);
  169.  pickup tiny.nib; pos23(bulb_diam,0); pos24(bulb_diam,90);
  170.  x23=x21-.5; top y24r=min(2x_height,h+1); top y21=x_height;
  171.  if bot y24l-x_height<tiny: y24l:=min(y24r-eps,y21+2tiny); fi
  172.  x23=x24; y23=.5[y24l,y24r]; dot(23,24); fi  % dot
  173. f_stroke(1,2,a,b,c,jut,inner_jut); % left stem, arc, terminal, serif
  174. f_stroke(11,12,d,e,f,inner_jut,inner_jut); % middle ditto
  175. pickup tiny.nib; filldraw stroke z21e--z22e;  % right stem
  176. pickup crisp.nib; top y3r=top y4r=x_height; lft x3=hround.5u-1;
  177. pos3(bar,90); pos4(bar,90);
  178. if serifs: x4=x21;  % bar will overlap upper right serif
  179.  sloped_serif.l(21,22,g,1/3,jut,min(oo,serif_drop));  % upper right serif
  180.  dish_serif(22,21,h,1/3,inner_jut,i,1/3,jut);  % lower right serif
  181. else: rt x4=hround(.5w+2.8u); fi
  182. pickup crisp.nib;
  183. if hefty: pos3'(bar,90); x3'-x1=x4-x11; y3'=y3;
  184.  pos4'(bar,90); x4'=x11; y4'=y4;
  185.  filldraw stroke z3e--z3'e; filldraw stroke z4'e--z4e;  % bars
  186. else: filldraw stroke z3e--z4e; fi  % bar
  187. penlabels(1,2,3,4,11,12,21,22,23,24); endchar;
  188.  
  189. ecchar "The ligature ffl";
  190. beginchar(oct"037",15u#+4letter_fit#,asc_height#,0);
  191. italcorr asc_height#*slant-serif_fit#+.5stem#-2u#;
  192. normal_adjust_fit(0,serif_fit#);
  193. pickup tiny.nib; pos1(stem',0); lft x1l=hround(2.5u-.5stem');
  194. pos11(stem',0); lft x11l=hround(.5w-.5stem');
  195. pos21(stem',0); rt x21r=hround(w-2.5u+.5stem');
  196. pos22(stem',0); x21=x22; bot y22=0; top y21=h;
  197. filldraw stroke z21e--z22e;  % right stem
  198. pickup fine.nib; numeric bulb_diam, inner_jut;
  199. if serifs: bulb_diam=hround .8[stem,flare];
  200.  pos2(bulb_diam,0); x2r=x11r-stem_corr;
  201.  pos12(bulb_diam,0); x12r=x21r-stem_corr;
  202.  y2+.5bulb_diam=.85[x_height,h+oo]; y12+.5bulb_diam=.9[x_height,h+oo];
  203.  sloped_serif.l(21,22,g,1/3,eps,max(serif_drop,oo)); % erase excess at top
  204.  if rt x1r+jut+.5u+2<=lft x11l-jut: inner_jut=jut;
  205.  else: rt x1r+inner_jut+.5u+2=lft x11l-inner_jut; fi
  206. else: pos2(5/7[vair,flare],90); top y2r=h; rt x2=hround 5.75u;
  207.  pos12(5/7[vair,flare],90); y12=y2; rt x12=hround(.5w+2.8u); fi
  208. f_stroke(1,2,a,b,c,jut,inner_jut); % left stem, arc, terminal, serif
  209. f_stroke(11,12,d,e,f,inner_jut,inner_jut); % middle ditto
  210. pickup crisp.nib; top y3r=top y4r=x_height; lft x3=hround.5u-1;
  211. pos3(bar,90); pos4(bar,90);
  212. if serifs: dish_serif(22,21,h,1/3,inner_jut,i,1/3,jut);  % lower right serif
  213.  pickup crisp.nib; x4=x21;
  214. else: rt x4=hround(.5w+2.8u); fi
  215. if hefty: pos3'(bar,90); x3'-x1=x4-x11; y3'=y3;
  216.  pos4'(bar,90); x4'=x11; y4'=y4;
  217.  filldraw stroke z3e--z3'e; filldraw stroke z4'e--z4e;  % bars
  218. else: filldraw stroke z3e--z4e; fi  % bar
  219. penlabels(1,2,3,4,11,12,21,22); endchar;
  220.  
  221. endinput;
  222.